2. Explore more about the lollipop
2-1. Original lollipop
original <- .generate_lollipop
set.seed(11)
lollipop <- original(500)
plot(lollipop)

stats::cor(lollipop, method = "pearson")[1,2]
## [1] 0.8536084
energy::dcor(lollipop[,1],lollipop[,2])
## [1] 0.8884833
my_XICOR(lollipop[,1], lollipop[,2])
## [1] 0.6018384
stats::cor(lollipop, method = "spearman")[1,2]
## [1] 0.8496716
Hmisc::hoeffd(lollipop[,1], lollipop[,2])$D
## x y
## x 1.0000000 0.4040181
## y 0.4040181 1.0000000
my_XICOR(lollipop[,1], lollipop[,2])
## [1] 0.6018384
stats::cor(lollipop, method = "spearman")[1,2]
## [1] 0.8496716
my_beta(lollipop[, 1], lollipop[, 2])
## [1] -0.888
my_beta(lollipop[, 1], lollipop[, 2])
## [1] -0.888
stats::cor(lollipop, method = "kendall")[1,2]
## [1] 0.6607615
2-2. Three clusters in total
new_lollipop1 <- function(n){
t(sapply(1:n, function(i){
# generate "cluster" assignment
k <- sample(1:3, 1)
# generate "ball"
if(k == 1){
x <- stats::rnorm(1, mean = 0, sd = 1)
y <- stats::rnorm(1, mean = 0, sd = 1)
# generate "bridge"
} else if (k == 2){
x <- stats::rnorm(1, mean = 1, sd = 0.5)
y <- stats::rnorm(1, mean = 2, sd = 0.5)
} else {
# k == 3, generate "stick"
x <- stats::rnorm(1, mean = 3, sd = 0.8)
y <- x + stats::rnorm(1, mean = 1, sd = 0.5)
}
c(x,y)
}))
}
set.seed(10)
new_pop1 <- new_lollipop1(500)
plot(new_pop1)

stats::cor(new_pop1, method = "pearson")[1,2]
## [1] 0.8219725
energy::dcor(new_pop1[,1],new_pop1[,2])
## [1] 0.8336293
my_XICOR(new_pop1[,1], new_pop1[,2])
## [1] 0.5233341
stats::cor(new_pop1, method = "spearman")[1,2]
## [1] 0.8256502
Hmisc::hoeffd(new_pop1[,1], new_pop1[,2])$D
## x y
## x 1.0000000 0.3500869
## y 0.3500869 1.0000000
my_XICOR(new_pop1[,1], new_pop1[,2])
## [1] 0.5233341
stats::cor(new_pop1, method = "spearman")[1,2]
## [1] 0.8256502
my_beta(new_pop1[, 1], new_pop1[, 2])
## [1] -0.584
my_beta(new_pop1[, 1], new_pop1[, 2])
## [1] -0.584
stats::cor(new_pop1, method = "kendall")[1,2]
## [1] 0.6452745
2-3. Two clusters that continously connect the circle and stick
set.seed(10)
new_lollipop2 <- function(n){
t(sapply(1:n, function(i){
# generate "cluster" assignment
k <- sample(1:2, 1)
# generate "ball"
if(k == 1){
x <- stats::rnorm(1, mean = 0, sd = 1)
y <- stats::rnorm(1, mean = 0, sd = 1)
} else {
# k == 2, generate "stick"
x <- stats::rnorm(1, mean = 1.5, sd = 0.8)
y <- x + stats::rnorm(1, mean = 0.5, sd = 0.5)
}
c(x,y)
}))
}
new_pop2 <- new_lollipop2(500)
plot(new_pop2)

stats::cor(new_pop2, method = "pearson")[1,2]
## [1] 0.6320267
energy::dcor(new_pop2[,1],new_pop2[,2])
## [1] 0.6309555
my_beta(new_pop2[,1], new_pop2[,2])
## [1] -0.528
stats::cor(new_pop2, method = "spearman")[1,2]
## [1] 0.6461776
Hmisc::hoeffd(new_pop2[,1], new_pop2[,2])$D
## x y
## x 1.0000000 0.1889667
## y 0.1889667 1.0000000
my_beta(new_pop2[,1], new_pop2[,2])
## [1] -0.528
stats::cor(new_pop2, method = "spearman")[1,2]
## [1] 0.6461776
my_beta(new_pop2[,1], new_pop2[,2])
## [1] -0.528
my_beta(new_pop2[,1], new_pop2[,2])
## [1] -0.528
stats::cor(new_pop2, method = "kendall")[1,2]
## [1] 0.4778998
2-4.The lollipop that has a very long stick
set.seed(15)
new_lollipop3 <- function(n){
t(sapply(1:n, function(i){
# generate "cluster" assignment
k <- sample(1:2, 1)
# generate "ball"
if(k == 1){
x <- stats::rnorm(1, mean = 0, sd = 1)
y <- stats::rnorm(1, mean = 0, sd = 1)
} else {
# k == 2, generate "stick"
x <- stats::rnorm(1, mean = 6, sd = 4)
y <- x + stats::rnorm(1, mean = 1, sd = 0.5)
}
c(x,y)
}))
}
new_pop3 <- new_lollipop3(500)
plot(new_pop3)

stats::cor(new_pop3, method = "pearson")[1,2]
## [1] 0.96866
energy::dcor(new_pop3[,1],new_pop3[,2])
## [1] 0.9701998
my_beta(new_pop3[,1], new_pop3[,2])
## [1] -0.736
stats::cor(new_pop3, method = "spearman")[1,2]
## [1] 0.8447599
Hmisc::hoeffd(new_pop3[,1], new_pop3[,2])$D
## x y
## x 1.00000 0.45858
## y 0.45858 1.00000
my_beta(new_pop3[,1], new_pop3[,2])
## [1] -0.736
stats::cor(new_pop3, method = "spearman")[1,2]
## [1] 0.8447599
my_beta(new_pop3[,1], new_pop3[,2])
## [1] -0.736
my_beta(new_pop3[,1], new_pop3[,2])
## [1] -0.736
stats::cor(new_pop3, method = "kendall")[1,2]
## [1] 0.6949579
2-5. The lollipop that has less longer stick
set.seed(230)
new_lollipop4 <- function(n){
t(sapply(1:n, function(i){
# generate "cluster" assignment
k <- sample(c(1,2), 1)
# generate "ball"
if(k == 1){
x <- stats::rnorm(1, mean = 0, sd = 0.5)
y <- stats::rnorm(1, mean = 1, sd = 0.5)
} else {
# k == 2, generate "stick"
x <- stats::rnorm(1, mean = 1, sd = 1)
y <- x + stats::rnorm(1, mean = 1, sd = 0.3)
}
c(x,y)
}))
}
new_pop4 <- new_lollipop4(500)
plot(new_pop4)

stats::cor(new_pop4, method = "pearson")[1,2]
## [1] 0.8282317
energy::dcor(new_pop4[,1],new_pop4[,2])
## [1] 0.808789
my_XICOR(new_pop4[,1], new_pop4[,2])
## [1] 0.4473378
stats::cor(new_pop4, method = "spearman")[1,2]
## [1] 0.729348
Hmisc::hoeffd(new_pop4[,1], new_pop4[,2])$D
## x y
## x 1.0000000 0.2651078
## y 0.2651078 1.0000000
my_XICOR(new_pop4[,1], new_pop4[,2])
## [1] 0.4473378
stats::cor(new_pop4, method = "spearman")[1,2]
## [1] 0.729348
my_beta(new_pop4[ ,1], new_pop4[, 2])
## [1] -0.552
my_beta(new_pop4[ ,1], new_pop4[, 2])
## [1] -0.552
stats::cor(new_pop4, method = "kendall")[1,2]
## [1] 0.5559118
2-6. The lollipop that has less dense stick in the circle
set.seed(230)
new_lollipop5 <- function(n){
t(sapply(1:n, function(i){
# generate "cluster" assignment
k <- sample(c(1,2), 1)
# generate "ball"
if(k == 1){
x <- stats::rnorm(1, mean = 0, sd = 1)
y <- stats::rnorm(1, mean = 0, sd = 1)
} else {
# k == 2, generate "stick"
x <- stats::rnorm(1, mean = 0, sd = 1)
y <- x + stats::rnorm(1, mean = 0, sd = 0.3)
}
c(x,y)
}))
}
new_pop5 <- new_lollipop5(500)
plot(new_pop5)

stats::cor(new_pop5, method = "pearson")[1,2]
## [1] 0.4485494
energy::dcor(new_pop5[,1],new_pop5[,2])
## [1] 0.4538884
my_XICOR(new_pop5[,1], new_pop5[,2])
## [1] 0.1725967
stats::cor(new_pop5, method = "spearman")[1,2]
## [1] 0.4548433
Hmisc::hoeffd(new_pop5[,1], new_pop5[,2])$D
## x y
## x 1.00000000 0.09886414
## y 0.09886414 1.00000000
my_XICOR(new_pop5[,1], new_pop5[,2])
## [1] 0.1725967
stats::cor(new_pop5, method = "spearman")[1,2]
## [1] 0.4548433
my_beta(new_pop5[ ,1], new_pop5[, 2])
## [1] -0.432
my_beta(new_pop5[ ,1], new_pop5[, 2])
## [1] -0.432
stats::cor(new_pop5, method = "kendall")[1,2]
## [1] 0.3461162
2-7. The lollipop that has very dense stick in the circle
set.seed(230)
new_lollipop6 <- function(n){
t(sapply(1:n, function(i){
# generate "cluster" assignment
k <- sample(c(1,2), 1)
# generate "ball"
if(k == 1){
x <- stats::rnorm(1, mean = 0, sd = 2)
y <- stats::rnorm(1, mean = 0, sd = 2)
} else {
# k == 2, generate "stick"
x <- stats::rnorm(1, mean = 0, sd = 0.5)
y <- x + stats::rnorm(1, mean = 0, sd = 0.3)
}
c(x,y)
}))
}
new_pop6 <- new_lollipop6(600)
plot(new_pop6)

stats::cor(new_pop6, method = "pearson")[1,2]
## [1] 0.03037599
energy::dcor(new_pop6[,1],new_pop6[,2])
## [1] 0.265397
my_XICOR(new_pop6[,1], new_pop6[,2])
## [1] 0.159381
stats::cor(new_pop6, method = "spearman")[1,2]
## [1] 0.2145965
Hmisc::hoeffd(new_pop6[,1], new_pop6[,2])$D
## x y
## x 1.00000000 0.06169904
## y 0.06169904 1.00000000
my_XICOR(new_pop6[,1], new_pop6[,2])
## [1] 0.159381
stats::cor(new_pop6, method = "spearman")[1,2]
## [1] 0.2145965
my_beta(new_pop6[ ,1], new_pop6[, 2])
## [1] -0.3333333
my_beta(new_pop6[ ,1], new_pop6[, 2])
## [1] -0.3333333
stats::cor(new_pop6, method = "kendall")[1,2]
## [1] 0.2000779
2-8. The lollipop that has multiple clusters in the ball
set.seed(230)
new_lollipop7 <- function(n){
t(sapply(1:n, function(i){
# generate "cluster" assignment
k <- sample(1:5, 1)
# generate "ball"
if(k == 1){
x <- stats::rnorm(1, mean = 0.5, sd = 0.5)
y <- stats::rnorm(1, mean = 0.5, sd = 0.5)
} else if (k == 2) {
x <- stats::rnorm(1, mean = -0.5, sd = 0.5)
y <- stats::rnorm(1, mean = -0.5, sd = 0.5)
} else if (k == 3) {
x <- stats::rnorm(1, mean = 0.5, sd = 0.5)
y <- stats::rnorm(1, mean = -0.5, sd = 0.5)
} else if (k == 4) {
x <- stats::rnorm(1, mean = -0.5, sd = 0.5)
y <- stats::rnorm(1, mean = 0.5, sd = 0.5)
} else {
# Otherwise, generate "stick"
x <- stats::rnorm(1, mean = 1.5, sd = 0.8)
y <- x + stats::rnorm(1, mean = 0.5, sd = 0.5)
}
c(x,y)
}))
}
new_pop7 <- new_lollipop7(700)
plot(new_pop7)

stats::cor(new_pop7, method = "pearson")[1,2]
## [1] 0.539343
energy::dcor(new_pop7[,1],new_pop7[,2])
## [1] 0.5047635
my_XICOR(new_pop7[,1], new_pop7[,2])
## [1] 0.2105576
stats::cor(new_pop7, method = "spearman")[1,2]
## [1] 0.3634762
Hmisc::hoeffd(new_pop7[,1], new_pop7[,2])$D
## x y
## x 1.00000000 0.05230268
## y 0.05230268 1.00000000
my_XICOR(new_pop7[,1], new_pop7[,2])
## [1] 0.2105576
stats::cor(new_pop7, method = "spearman")[1,2]
## [1] 0.3634762
my_beta(new_pop7[ ,1], new_pop7[, 2])
## [1] -0.2057143
my_beta(new_pop7[ ,1], new_pop7[, 2])
## [1] -0.2057143
stats::cor(new_pop7, method = "kendall")[1,2]
## [1] 0.2537911
2-9. The lollipop that has multiple clusters in the ball and more weights on stick than previous one
set.seed(230)
new_lollipop8 <- function(n){
t(sapply(1:n, function(i){
# generate "cluster" assignment
k <- sample(1:6, 1)
# generate "ball"
if(k == 1){
x <- stats::rnorm(1, mean = 0.5, sd = 0.5)
y <- stats::rnorm(1, mean = 0.5, sd = 0.5)
} else if (k == 2) {
x <- stats::rnorm(1, mean = -0.5, sd = 0.5)
y <- stats::rnorm(1, mean = -0.5, sd = 0.5)
} else if (k == 3) {
x <- stats::rnorm(1, mean = 0.5, sd = 0.5)
y <- stats::rnorm(1, mean = -0.5, sd = 0.5)
} else if (k == 4) {
x <- stats::rnorm(1, mean = -0.5, sd = 0.5)
y <- stats::rnorm(1, mean = 0.5, sd = 0.5)
} else {
# Otherwise, generate "stick"
x <- stats::rnorm(1, mean = 1, sd = 1)
y <- x + stats::rnorm(1, mean = 0.5, sd = 0.3)
}
c(x,y)
}))
}
new_pop8 <- new_lollipop8(800)
plot(new_pop8)

stats::cor(new_pop8, method = "pearson")[1,2]
## [1] 0.6504005
energy::dcor(new_pop8[,1],new_pop8[,2])
## [1] 0.6132621
my_XICOR(new_pop8[,1], new_pop8[,2])
## [1] 0.3001927
stats::cor(new_pop8, method = "spearman")[1,2]
## [1] 0.5171377
Hmisc::hoeffd(new_pop8[,1], new_pop8[,2])$D
## x y
## x 1.0000000 0.1235858
## y 0.1235858 1.0000000
my_XICOR(new_pop8[,1], new_pop8[,2])
## [1] 0.3001927
stats::cor(new_pop8, method = "spearman")[1,2]
## [1] 0.5171377
my_beta(new_pop8[ ,1], new_pop8[, 2])
## [1] -0.32
my_beta(new_pop8[ ,1], new_pop8[, 2])
## [1] -0.32
stats::cor(new_pop8, method = "kendall")[1,2]
## [1] 0.3823467